#include "savegnss.h"

SaveGNSS::SaveGNSS(QObject *parent) : SaveBase(parent)
{

}

bool SaveGNSS::saveData(const QString &data)
{
    if(!m_file.isOpen() || m_saveCount >= 1000) {
        createNewFile();
    }

    m_file.write(data.toUtf8());
    m_file.close();
    qDebug() << "完成一次TYFS存储";
    return true;
}

void SaveGNSS::createNewFile()
{
    // 检查磁盘是否可用
    if (!checkAndSwitchDisk()) {
        return; // 所有磁盘不可用，直接返回
    }

    // 关闭当前文件
    if (m_file.isOpen()) {
        m_file.close();
    }

    // 构造完整文件路径：磁盘路径/基础路径/视频名称/文件名
    QString currentDisk = m_diskPaths[m_currentDiskIndex];
    QString fullDir = QString("%1/%2/%3").arg(currentDisk).arg(m_fileSavePath).arg(m_videoName);
    QDir dir(fullDir);
    if (!dir.exists() && !dir.mkpath(".")) { // 确保目录存在
        qDebug() << "无法创建目录:" << fullDir;
        return;
    }

    // 生成文件名（包含时间戳）
    m_fileStartTime = QDateTime::currentDateTime();
    QString fileName = QString("%1/%2_%3.h264")
            .arg(fullDir)
            .arg(m_desc)
            .arg(m_fileStartTime.toString("yyyy_MM_dd_hh_mm_ss"));

    m_file.setFileName(fileName);
    if (!m_file.open(QIODevice::WriteOnly)) {
        qDebug() << "无法创建文件:" << fileName << "错误:" << m_file.errorString();
        return;
    }

    qDebug() << "创建新文件: " << fileName;
}

void SaveGNSS::onWorking(const QString ip, const quint16 port, const QByteArray arr)
{
    if(!m_saveStatues || arr.isEmpty() || ip != m_srcIP) {
        return;
    }

    if(arr.mid(3,3)=="ZDA") //GNSS时间
    {//ASCII模式
        //                        QString str;
        //            str = datagram.mid(9,20);

        QStringList parts =  QString(arr).split(",");
        QString timeStr = QDateTime::currentDateTime().toString("yyyy-MM-dd:hh-mm-ss-zzz");
        saveData(QString("%1 GNSS时间:%2").arg(timeStr).arg(parts[2]));
        //ui->lineEdit_31->setText(parts[2]);
    }
    if(arr.mid(3,3)=="HDT") //GNSS方位（真北）
    {
        //            QString str;
        //            str = datagram.mid(7,8);
        QStringList parts =  QString(arr).split(",");
        QString timeStr = QDateTime::currentDateTime().toString("yyyy-MM-dd:hh-mm-ss-zzz");
        saveData(QString("%1 GNSS方位(正北):%2").arg(timeStr).arg(parts[1]));

        //ui->lineEdit_27->setText(parts[1]);
    }
    if(arr.mid(3,3)=="GGA") //GNSS经纬高
    {
        //            QString str;
        //            str = datagram.mid(17,13);

        //            ui->lineEdit_28->setText(QString::number(str.toDouble()/100.0));

        //            str = datagram.mid(33,14);
        //            ui->lineEdit_29->setText(QString::number(str.toDouble()/100.0));

        //            str = datagram.mid(60,7);
        //            ui->lineEdit_25->setText(str);

        QStringList parts =  QString(arr).split(",");
        QString timeStr = QDateTime::currentDateTime().toString("yyyy-MM-dd:hh-mm-ss-zzz");
        QString weidu = QString::number(parts[2].toDouble()/100.0);
        QString jingdu = QString::number(parts[4].toDouble()/100.0);
        QString height = parts[9];
        saveData(QString("%1 纬度:%2,经度:%3,高度:%4").arg(timeStr).arg(weidu).arg(jingdu).arg(height));
        //ui->lineEdit_28->setText(QString::number(parts[2].toDouble()/100.0)); //纬度
        //ui->lineEdit_29->setText(QString::number(parts[4].toDouble()/100.0));//经度
        //ui->lineEdit_25->setText(parts[9]);//高度
    }
}
